package wf.source.hrm.service.impl;

import com.baomidou.mybatisplus.plugins.Page;
import org.springframework.beans.factory.annotation.Autowired;
import wf.source.hrm.domain.Employee;
import wf.source.hrm.domain.Tenant;
import wf.source.hrm.mapper.EmployeeMapper;
import wf.source.hrm.mapper.TenantMapper;
import wf.source.hrm.query.TenantQuery;
import wf.source.hrm.service.ITenantService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import wf.source.hrm.util.LetterUtil;
import wf.source.hrm.util.PageList;

import java.io.Serializable;
import java.util.*;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author wangfang
 * @since 2020-06-22
 */
@Service
public class TenantServiceImpl extends ServiceImpl<TenantMapper, Tenant> implements ITenantService {

    @Autowired
    private TenantMapper tenantMapper;

    @Autowired
    private EmployeeMapper employeeMapper;

    /**
     * 获取机构的首字母及机构的集合
     * @return
     */
    @Override
    public Map<String, Object> getLetters() {
        Map<String, Object> result=new HashMap<>();
        //机构 查询所有机构
        List<Tenant> tenants = tenantMapper.selectList(null);
        //机构放入map集合
        result.put("tenants",tenants);
        //准备集合装首字母 去重 TreeSet带排序功能
        TreeSet<String> letters=new TreeSet<>();
        //取首字母
        for (Tenant tenant : tenants) {
            //获取机构对象的公司名称再取首字母
            String firstLetter = LetterUtil.getFirstLetter(tenant.getCompanyName());
            //首字母转为大写放入set
            letters.add(firstLetter.toUpperCase());
        }
        result.put("letters",letters);
        return result;
    }

    @Override
    public PageList<Tenant> selectPageList(TenantQuery query) {
        //分页对象
        Page<Tenant> page=new Page<>(query.getPage(),query.getRows());
        //加载分页列表
        List<Tenant> data=tenantMapper.loadPageList(page,query);
        //如果总条数是空 就返回一个空列表
        if(page.getTotal()<1){
            return new PageList<>();
        }//总条数 和每页条数
        return new PageList<>(page.getTotal(),data);
    }

    @Override
    public boolean insert(Tenant entity) {
        entity.setRegisterTime(new Date());//设置默认值
        //添加机构 默认已经生成了id
        tenantMapper.insert(entity);
        //添加机构管理员 获取管理员
        if(entity.getAdmin()!=null){
            Employee admin = entity.getAdmin();
            admin.setRealName(admin.getUsername());//设置默认用户为真实名字
            admin.setState(0);
            admin.setInputTime(new Date());//设置默认新增的时间
            admin.setType(3);
            //给管理员设置机构id
            admin.setTenantId(entity.getId());
            employeeMapper.insert(admin);
        }
        return true;
    }

    @Override
    public boolean deleteById(Serializable id) {
        //先删除机构
        tenantMapper.deleteById(id);
        //再删除管理员 添加的一个方法 通过机构id去删除管理员 去创建方法
        employeeMapper.removeByTenantId(id);
        return true;
    }

    @Override
    public boolean updateById(Tenant entity) {
        //先修改机构
        tenantMapper.updateById(entity);
        //机构获取管理员 设置管理员的机构id
        entity.getAdmin().setTenantId(entity.getId());
        //修改管理员
        employeeMapper.updateById(entity.getAdmin());
        return true;
    }
}
